// 给定单链表的头节点 head ，将所有索引为奇数的节点和索引为偶数的节点分别分组，保持它们原有的相对顺序，然后把偶数索引节点分组连接到奇数索引节点分组之后，返回重新排序的链表。

// 第一个节点的索引被认为是 奇数 ， 第二个节点的索引为 偶数 ，以此类推。

// 请注意，偶数组和奇数组内部的相对顺序应该与输入时保持一致。

// 你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。

// 示例 1:
// 输入: head = [1,2,3,4,5]
// 输出: [1,3,5,2,4]

// 示例 2:
// 输入: head = [2,1,3,5,6,4,7]
// 输出: [2,3,6,7,1,5,4]

function oddEvenList(head) {
  // 处理空链表或只有一个节点的情况
  if (!head || !head.next) return head;

  // 初始化奇数节点和偶数节点的指针
  let odd = head;
  let even = head.next;
  let evenHead = even;

  while (even && even.next) {
    // 连接奇数节点
    odd.next = even.next;
    // 更新奇数节点指针
    odd = odd.next;
    // 连接偶数节点
    even.next = odd.next;
    // 更新偶数节点指针
    even = even.next;
  }

  // 连接奇数节点和偶数节点
  odd.next = evenHead;
  return head;
}
